﻿///<summary>
/// 模块功能：一些常用的正则表达式判断 数据类型的合法性
/// 作者：吴龙波
/// 日期：
/// 编号：
/// 增加验证版面字符串函数IsValidPage
/// 作者：裴建
/// 日期：2008-09-05
///<summary>
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace HGZP.PLL
{
    public class CheckValid
    {

        //判断数据类型 正确返回ture
        #region 日期是否合法和存在（允许输入的日期格式为yyyy-MM-dd，其中输入2006-1-1,2006-01-01这种格式都是有效的，而且包含了对不同年份2月的天数，闰年的控制）
        /// <summary>
        /// 日期是否合法和存在
        /// </summary>
        /// <param name="timedate"></param>
        /// <returns></returns>
        public static bool IsValidDate(string timedate)
        {
            Regex rtimedate = new Regex(@"^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$");//正则表达式验证
            return rtimedate.IsMatch(timedate.Trim());
        }
        #endregion



        #region  判断电子邮件是否有效
        /// <summary>
        /// 判断电子邮件是否有效
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public static bool IsValidEmail(string strIn)
        {
            return Regex.IsMatch(strIn, @"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$");
        }
        #endregion

        #region  判断是否为整数
        /// <summary>
        /// 判断是否为整数
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public static bool IsValidInteger(string strIn)
        {
            bool bReturn = Regex.IsMatch(strIn, @"^-?\d+$");
            if (bReturn == false) { return false; }
            //
            if (strIn.Length != Encoding.Default.GetByteCount(strIn)) //不是半角整数
            {
                return false;
            }
            //
            return true; ;
            //
        }
        #endregion

        #region 正整数 >0
        /// <summary>
        /// 正整数 >0
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public static bool IsValidIntegerBigToZero(string strIn)
        {
            return Regex.IsMatch(strIn, @"^[0-9]*[1-9][0-9]*$");
        }
        #endregion

        #region 是否为浮点数
        /// <summary>
        /// 是否为浮点数
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public static bool IsValidFloat(string strIn)
        {

            bool bReturn = Regex.IsMatch(strIn, @"^(-?\d+)(\.\d+)?$");
            if (bReturn == false) { return false; }
            //
            if (strIn.Length != Encoding.Default.GetByteCount(strIn)) //不是半角整数
            {
                return false;
            }
            //
            return true; ;
        }
        #endregion

        #region 正数 包含小数
        /// <summary>
        /// 正数 包含小数
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public static bool IsValidPositiveFloat(string strIn)
        {
            return Regex.IsMatch(strIn, @"^\d+(\.\d+)?$");
        }
        #endregion

        #region 验证用户名是否合法  以字母开头,长度在6-18之间,只能包含字符、数字和下划线
        /// <summary>
        /// 验证用户名是否合法  以字母开头,长度在6-18之间,只能包含字符、数字和下划线
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public static bool IsValidUserName(string strIn)
        {
            return Regex.IsMatch(strIn, @"^[a-zA-Z]\w{5,17}$");
        }
        #endregion

        #region 验证数据库名称是否合法 以字母或下划线开头,长度1-20之间,只能包含字符、数字和下划线
        /// <summary>
        /// 验证数据库名称是否合法 以字母或下划线开头,长度1-20之间,只能包含字符、数字和下划线
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public static bool IsValidDataBaseName(string strIn)
        {
            return Regex.IsMatch(strIn, @"^[a-zA-Z_]\w{0,20}$");
        }
        #endregion

        //#region 判断字符串是否超出长度
        //public static bool IsOverLength(string strIn, int length)
        //{

        //    if (MyFunction.GetStringLength(strIn) > length)
        //    {
        //        return false;
        //    }
        //    return true;
        //}
        //#endregion

        #region 验证身份证是否合法
        /// <summary>
        /// 验证身份证是否合法
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public static bool IsValidIdentity(string strIn)
        {
            return Regex.IsMatch(strIn, @"\d{15}|\d{18}");
        }
        #endregion

        #region 验证是否为偶数
        /// <summary>
        /// 验证是否为偶数
        /// </summary>
        /// <param name="inValue"></param>
        /// <returns></returns>
        public static bool IsValidEven(int inValue)
        {
            return inValue % 2 == 0;
        }
        #endregion

        #region 验证字符串 1;2;3; 数字 分号 串
        /// <summary>
        /// 验证字符串 1;2;3; 数字 分号 串
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public static bool IsNumberSemicolon(string strIn)
        {
            return Regex.IsMatch(strIn, @"^[0-9;]*$");
        }
        #endregion

        /// <summary>
        /// 纯数字 （没有.-等）
        /// </summary>
        /// <param name="strIn"></param>
        /// <returns></returns>
        public static bool IsNumber(string strIn)
        {
            return Regex.IsMatch(strIn, @"^[0-9]*$");
        }
        /// <summary>
        /// 验证版面字符串1;2;3
        /// </summary>
        /// <param name="strIn"></param>
        /// <param name="groupCount"></param>
        /// <returns></returns>
        public static bool IsValidPage(string strIn, int groupCount)
        {
            bool result = Regex.IsMatch(strIn, @"([a-zA-Z0-9]+;){" + (groupCount - 1).ToString() + "}([a-zA-Z0-9]+)$");
            return result;
        }
    }
}
